package jonggyuni.basic;

import java.util.Scanner;

public class J09_Exception {

	public static void main(String[] args) throws Exception {
		//예외처리-일종의 오류
		//프로그램에서의 오류의 종류
		//1.compile-time error
		//  오타등의 잘못된 코드 작성이 원인 개발자가 충분히 수습가능
		//2.runtime-time error
		//  논리적 오류 (개발자 수습가능),
		//  프로그램 실행시 발생하는 오류 잘못된 동작(개발자 수습가능)이나 
		//  특별한 상황이 원인(개발자 수습불가)
		//  따라서, 예외는 프로그램 실행중 발생하는 오류를 개발자가 처리하기 위해
		//  작성하는 조치사항을 의미
		//  이것을 통해 오류로 인한 프로그램 실행 중단을 막을 수 있음
		
		//  예외 : checked exception / unchecked exception
		
		
		//상황1) 두개의 정수를 입력받아 두수를 나눈 결과를 출력하는 프로그램 작성

		int num1, num2, result;
		Scanner sc = new Scanner(System.in);
/*		System.out.println("두 수는?");
		num1=sc.nextInt();
		num2=sc.nextInt();
		
		result = num1/num2;
		System.out.println("두 수를 나눈 결과는 "+ result);*/
		
		//num2에 0이 입력되면 num1을 0으로 나눌 수 없으므로 
		//오류 발생하고 프로그램 중단
		//중단시 오류발생 부분 출력 안됨.
		
/*		System.out.println("두 수는?");
		num1=sc.nextInt();
		num2=sc.nextInt();
		
		if(num1==0 || num2==0){
			System.out.println("0을 입력할 수 없습니다.");
		}
		else{
			result = num1/num2;
			System.out.println("두 수를 나눈 결과는 "+ result);
			System.out.println("종료하겠습니다.");
		}*/
		//오류가 발생할 조건을 if문으로 막음
		//오류 발생 조건이 많을 경우 다중 if문으로 사용해야 하는데 그러면 코드가 복잡해짐
//		System.out.println("두 수는?");
//		try{
//			num1=sc.nextInt();
//			num2=sc.nextInt();
//			result = num1/num2;
//			System.out.println("두 수를 나눈 결과는 "+ result);
//		}catch(Exception ex){
//			System.out.println("입력값은 숫자이고 0이상입니다!");			
//		}
		//자바에서는 오류 발생시 예외 exception처리 매커니즘을 사용함
		//오류가 발생할 가능성이 있는 코드를 try-catch블럭으로 지정하고
		//catch에서 오류에 대한 조치사항을 작성
		
		//예외 던지기
		System.out.println("두 수는?");
		try{
			num1=sc.nextInt();
			num2=sc.nextInt();
			//throw new Exception("숫자만 입력할 수 있습니다");
		}catch(Exception ex){
			throw new Exception("문자만 입력할 수 있습니다");
			//System.out.println(ex.getMessage());
			//입력시 발생하는 예외를 각각의 catch블럭에서처리하지 않고 
			//한곳에 모아서 처리하기 위해
			//throw라는 명령으로 예외를 다른 곳으로 넘김
		}
		try{
			result = num1/num2;
			System.out.println("두 수를 나눈 결과는 "+ result);
			throw new Exception("잘못된 연산을 시도했습니다");
		}catch(Exception ex){
			System.out.println(ex.getMessage());
		}

		sc.close();
	}

}
